/**
 * ProjectName: mmj-common
 * FileName: MysqlBaseDao.java
 * PackageName: com.cy.mmj.basedao
 *
 * Copyright (c) 2012, CYOU All Rights Reserved.
*/
package com.cyou.qb.common.dao;

import java.util.List;

import org.mybatis.spring.support.SqlSessionDaoSupport;

import com.cyou.nad.dao.PojoPage;
import com.cyou.nad.dao.mybatis.PageRowBounds;

/**
 *
 * ClassName:MysqlBaseDao. <br/>
 * Function: mysql公共DAO <br/>
 * date:2012-8-9 下午2:39:08 <br/>
 *
 * @author yuanchao
 * @version
 */
public class MysqlBaseDao extends SqlSessionDaoSupport {

	/**
	 *
	 * insert: 带参数的插入操作. <br/>
	 *
	 * @author yuanchao
	 * @param method mapper中statement的id
	 * @param entity mapper中statement的参数
	 * @return 影响的行数
	 */
	protected int insert(String method, Object entity) {
		return this.getSqlSession().insert(method, entity);
	}

	/**
	 *
	 * delete: 带参数的删除操作 . <br/>
	 *
	 * @author yuanchao
	 * @param method mapper中statement的id
	 * @param entity mapper中statement的参数
	 * @return 影响的行数
	 */
	protected int delete(String method, Object entity) {
		return this.getSqlSession().delete(method, entity);
	}

	/**
	 *
	 * delete: 无参数的删除操作 . <br/>
	 *
	 * @author yuanchao
	 * @param method  mapper中statement的id
	 * @return 影响的行数
	 */
	protected int delete(String method) {
		return this.getSqlSession().delete(method);
	}

	/**
	 *
	 * update: 带参数的修改操作 . <br/>
	 *
	 * @author yuanchao
	 * @param method  mapper中statement的id
	 * @param entity  mapper中statement的参数
	 * @return 影响的行数
	 */
	protected int update(String method, Object entity) {
		return this.getSqlSession().update(method, entity);
	}

	/**
	 *
	 * getUniqueOne: 查询唯一记录，有条件参数 . <br/>
	 *
	 * @author yuanchao
	 * @param method mapper中statement的id
	 * @param entity mapper中statement的参数
	 * @param <T> 泛型
	 * @return 查询出的对象
	 */
	@SuppressWarnings("unchecked")
	protected <T> T getUniqueOne(String method, Object entity) {
		return (T) this.getSqlSession().selectOne(method, entity);
	}

	/**
	 *
	 * getFirstOne: 得到查询结果中的第一条记录 . <br/>
	 *
	 * @author yuanchao
	 * @param method mapper中statement的id
	 * @param entity mapper中statement的参数
	 * @param <T> 泛型
	 * @return 查询出的对象
	 */
	@SuppressWarnings("unchecked")
	protected <T> T getFirstOne(String method, Object entity) {
		List<T> list = this.getSqlSession().selectList(method, entity);
		if (list.size() != 0) {
			return list.get(0);
		} else {
			return null;
		}
	}

	/**
	 *
	 * getOne: 查询出唯一记录，无条件参数 . <br/>
	 *
	 * @author yuanchao
	 * @param method mapper中statement的id
	 * @param <T> 泛型
	 * @return 查询出的对象
	 */
	@SuppressWarnings("unchecked")
	protected <T> T getOne(String method) {
		return (T) this.getSqlSession().selectOne(method);
	}

	/**
	 *
	 * getList: 查询出一个结果集，无条件参数 . <br/>
	 *
	 * @author yuanchao
	 * @param method mapper中statement的id
	 * @param <T> 泛型
	 * @return 查询出的结果集list
	 */
	@SuppressWarnings("unchecked")
	protected <T> List<T> getList(String method) {
		return this.getSqlSession().selectList(method);
	}

	/**
	 *
	 * getListByEntity: 查询出一个结果集，有条件参数 . <br/>
	 *
	 * @author yuanchao
	 * @param method mapper中statement的id
	 * @param entity mapper中statement的参数
	 * @param <T> 泛型
	 * @return 查询出的结果集list
	 */
	@SuppressWarnings("unchecked")
	protected <T> List<T> getListByEntity(String method, Object entity) {
		return this.getSqlSession().selectList(method, entity);
	}
	
	/**
	 * 
	 * @param method	mapper中statement的id
	 * @param entity	mapper中statement的参数
	 * @param pageNo	当前要查询的页号
	 * @param pageSize	每页最大条数
	 * @return
	 */
	@SuppressWarnings({"rawtypes" })
	protected PojoPage getPage(String method, Object entity, int pageNo, int pageSize) {
		PageRowBounds pageRowBounds = PageRowBounds.getInstance(pageNo, pageSize);
		List itemList = this.getSqlSession().selectList(method, entity, pageRowBounds);
		PojoPage pojoPage = new PojoPage(pageRowBounds.getOffset(), pageRowBounds.getTotalCount(), pageSize, itemList);
		return pojoPage;
	}
	
	/**
	 * 
	 * @param method	mapper中statement的id
	 * @param entity	mapper中statement的参数
	 * @param pageNo	当前要查询的页号
	 * @param pageSize	每页最大条数
	 * @return
	 */
	@SuppressWarnings({"rawtypes" })
	protected PojoPage getPage(String method, int pageNo, int pageSize) {
		return this.getPage(method,null, pageNo, pageSize);
	}
	

	/**
	 *
	 * getCount: 得到结果集行数 . <br/>
	 *
	 * @author yuanchao
	 * @param method mapper中statement的id
	 * @return 结果集行数
	 */
	protected int getCount(String method) {
		return (Integer) this.getSqlSession().selectOne(method);
	}
	
	/**
	 * Description 得到结果集行数，有条件参数
	 * @author lidongwei
	 * @since 2012-10-11
	 */
	protected int getCount(String method, Object entity){
		return (Integer) this.getSqlSession().selectOne(method, entity);
	}

}
